--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / frontend / js / KeyboardShortcuts.js
Displaying Raw • Download
meshchatx/src/frontend/js/KeyboardShortcuts.js e8d8d64fc0346ecc26fe232166cc60a7269b145e (e8d8d64f) Text, 4.63 KB
Tff7b72import Te6edf3GlobalEmitter Tff7b72from Ta5d6ff"./GlobalEmitter"Tb4b4b4;
Tff7b72import Te6edf3WebSocketConnection Tff7b72from Ta5d6ff"./WebSocketConnection"Tb4b4b4;
Tff7b72class Te6edf3KeyboardShortcuts Tb4b4b4{
Tff7b72constructorTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3shortcuts Tff7b72= Tff7b72thisTb4b4b4.Te6edf3getDefaultShortcutsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3activeKeys Tff7b72= Tff7b72new Tffa657SetTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3isRecording Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3onRecordCallback Tff7b72= Tff7b72nullTb4b4b4;
Tffa657windowTb4b4b4.Te6edf3addEventListenerTb4b4b4(Ta5d6ff"keydown"Tb4b4b4, Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4=> Tff7b72thisTb4b4b4.Te6edf3handleKeyDownTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)Tb4b4b4;
Tffa657windowTb4b4b4.Te6edf3addEventListenerTb4b4b4(Ta5d6ff"keyup"Tb4b4b4, Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4=> Tff7b72thisTb4b4b4.Te6edf3handleKeyUpTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4)Tb4b4b4;
Tffa657windowTb4b4b4.Te6edf3addEventListenerTb4b4b4(Ta5d6ff"blur"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tff7b72thisTb4b4b4.Te6edf3activeKeysTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3getDefaultShortcutsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4[
Tb4b4b4{ Te6edf3actionTff7b72: Ta5d6ff"nav_messages"Tb4b4b4, Te6edf3keysTff7b72: Tb4b4b4[Ta5d6ff"alt"Tb4b4b4, Ta5d6ff"1"Tb4b4b4]Tb4b4b4, Te6edf3descriptionTff7b72: Ta5d6ff"Go to Messages" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3actionTff7b72: Ta5d6ff"nav_nomad"Tb4b4b4, Te6edf3keysTff7b72: Tb4b4b4[Ta5d6ff"alt"Tb4b4b4, Ta5d6ff"2"Tb4b4b4]Tb4b4b4, Te6edf3descriptionTff7b72: Ta5d6ff"Go to Nomad Network" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3actionTff7b72: Ta5d6ff"nav_map"Tb4b4b4, Te6edf3keysTff7b72: Tb4b4b4[Ta5d6ff"alt"Tb4b4b4, Ta5d6ff"3"Tb4b4b4]Tb4b4b4, Te6edf3descriptionTff7b72: Ta5d6ff"Go to Map" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3actionTff7b72: Ta5d6ff"nav_paper"Tb4b4b4, Te6edf3keysTff7b72: Tb4b4b4[Ta5d6ff"alt"Tb4b4b4, Ta5d6ff"p"Tb4b4b4]Tb4b4b4, Te6edf3descriptionTff7b72: Ta5d6ff"Go to Paper Message Generator" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3actionTff7b72: Ta5d6ff"nav_archives"Tb4b4b4, Te6edf3keysTff7b72: Tb4b4b4[Ta5d6ff"alt"Tb4b4b4, Ta5d6ff"4"Tb4b4b4]Tb4b4b4, Te6edf3descriptionTff7b72: Ta5d6ff"Go to Archives" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3actionTff7b72: Ta5d6ff"nav_calls"Tb4b4b4, Te6edf3keysTff7b72: Tb4b4b4[Ta5d6ff"alt"Tb4b4b4, Ta5d6ff"5"Tb4b4b4]Tb4b4b4, Te6edf3descriptionTff7b72: Ta5d6ff"Go to Calls" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3actionTff7b72: Ta5d6ff"nav_settings"Tb4b4b4, Te6edf3keysTff7b72: Tb4b4b4[Ta5d6ff"alt"Tb4b4b4, Ta5d6ff"s"Tb4b4b4]Tb4b4b4, Te6edf3descriptionTff7b72: Ta5d6ff"Go to Settings" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3actionTff7b72: Ta5d6ff"compose_message"Tb4b4b4, Te6edf3keysTff7b72: Tb4b4b4[Ta5d6ff"alt"Tb4b4b4, Ta5d6ff"n"Tb4b4b4]Tb4b4b4, Te6edf3descriptionTff7b72: Ta5d6ff"Compose New Message" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3actionTff7b72: Ta5d6ff"sync_messages"Tb4b4b4, Te6edf3keysTff7b72: Tb4b4b4[Ta5d6ff"alt"Tb4b4b4, Ta5d6ff"r"Tb4b4b4]Tb4b4b4, Te6edf3descriptionTff7b72: Ta5d6ff"Sync Messages" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3actionTff7b72: Ta5d6ff"command_palette"Tb4b4b4, Te6edf3keysTff7b72: Tb4b4b4[Ta5d6ff"control"Tb4b4b4, Ta5d6ff"k"Tb4b4b4]Tb4b4b4, Te6edf3descriptionTff7b72: Ta5d6ff"Open Command Palette" Tb4b4b4}Tb4b4b4,
Tb4b4b4{ Te6edf3actionTff7b72: Ta5d6ff"toggle_sidebar"Tb4b4b4, Te6edf3keysTff7b72: Tb4b4b4[Ta5d6ff"control"Tb4b4b4, Ta5d6ff"b"Tb4b4b4]Tb4b4b4, Te6edf3descriptionTff7b72: Ta5d6ff"Toggle Sidebar" Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4;
Tb4b4b4}
Te6edf3handleKeyDownTb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3key Tff7b72= Te6edf3eTb4b4b4.Te6edf3keyTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3activeKeysTb4b4b4.Te6edf3addTb4b4b4(Te6edf3keyTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3isRecordingTb4b4b4) Tb4b4b4{
Te6edf3eTb4b4b4.Te6edf3preventDefaultTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3onRecordCallbackTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3keys Tff7b72= Tffa657ArrayTb4b4b4.Tff7b72fromTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3activeKeysTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3onRecordCallbackTb4b4b4(Te6edf3keysTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72returnTb4b4b4;
Tb4b4b4}
T8b949e// Check for matches
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3shortcut Tff7b72of Tff7b72thisTb4b4b4.Te6edf3shortcutsTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3matchesTb4b4b4(Te6edf3shortcutTb4b4b4.Te6edf3keysTb4b4b4)Tb4b4b4) Tb4b4b4{
T8b949e// Don't trigger if user is typing in an input, unless it's a global shortcut
Tff7b72if Tb4b4b4(
Tb4b4b4[Ta5d6ff"INPUT"Tb4b4b4, Ta5d6ff"TEXTAREA"Tb4b4b4]Tb4b4b4.Te6edf3includesTb4b4b4(Tffa657documentTb4b4b4.Te6edf3activeElementTb4b4b4.Te6edf3tagNameTb4b4b4) Tff7b72&&
Tff7b72!Te6edf3shortcutTb4b4b4.Te6edf3keysTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"control"Tb4b4b4) Tff7b72&&
Tff7b72!Te6edf3shortcutTb4b4b4.Te6edf3keysTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"alt"Tb4b4b4) Tff7b72&&
Tff7b72!Te6edf3shortcutTb4b4b4.Te6edf3keysTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"meta"Tb4b4b4)
Tb4b4b4) Tb4b4b4{
Tff7b72continueTb4b4b4;
Tb4b4b4}
Te6edf3eTb4b4b4.Te6edf3preventDefaultTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3executeActionTb4b4b4(Te6edf3shortcutTb4b4b4.Te6edf3actionTb4b4b4)Tb4b4b4;
Tff7b72breakTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Te6edf3handleKeyUpTb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3key Tff7b72= Te6edf3eTb4b4b4.Te6edf3keyTb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3activeKeysTb4b4b4.Tff7b72deleteTb4b4b4(Te6edf3keyTb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3matchesTb4b4b4(Te6edf3shortcutKeysTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3shortcutKeysTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0Tb4b4b4) Tff7b72return Tff7b72falseTb4b4b4;
T8b949e// Map common keys
Tff7b72const Te6edf3mappedActiveKeys Tff7b72= Tffa657ArrayTb4b4b4.Tff7b72fromTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3activeKeysTb4b4b4)Tb4b4b4.Te6edf3mapTb4b4b4(Tb4b4b4(Te6edf3kTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3k Tff7b72=== Ta5d6ff"control"Tb4b4b4) Tff7b72return Ta5d6ff"control"Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3k Tff7b72=== Ta5d6ff"alt"Tb4b4b4) Tff7b72return Ta5d6ff"alt"Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3k Tff7b72=== Ta5d6ff"shift"Tb4b4b4) Tff7b72return Ta5d6ff"shift"Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3k Tff7b72=== Ta5d6ff"meta"Tb4b4b4) Tff7b72return Ta5d6ff"meta"Tb4b4b4;
Tff7b72return Te6edf3kTb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3shortcutKeysTb4b4b4.Te6edf3length Tff7b72!== Te6edf3mappedActiveKeysTb4b4b4.Te6edf3lengthTb4b4b4) Tff7b72return Tff7b72falseTb4b4b4;
Tff7b72return Te6edf3shortcutKeysTb4b4b4.Te6edf3everyTb4b4b4(Tb4b4b4(Te6edf3kTb4b4b4) Tb4b4b4=> Te6edf3mappedActiveKeysTb4b4b4.Te6edf3includesTb4b4b4(Te6edf3kTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3executeActionTb4b4b4(Te6edf3actionTb4b4b4) Tb4b4b4{
Te6edf3GlobalEmitterTb4b4b4.Te6edf3emitTb4b4b4(Ta5d6ff"keyboard-shortcut"Tb4b4b4, Te6edf3actionTb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3setShortcutsTb4b4b4(Te6edf3shortcutsTb4b4b4) Tb4b4b4{
T8b949e// Merge with defaults to ensure all actions have a description
Tff7b72const Te6edf3defaults Tff7b72= Tff7b72thisTb4b4b4.Te6edf3getDefaultShortcutsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3shortcuts Tff7b72= Te6edf3shortcutsTb4b4b4.Te6edf3mapTb4b4b4(Tb4b4b4(Te6edf3sTb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3def Tff7b72= Te6edf3defaultsTb4b4b4.Te6edf3findTb4b4b4(Tb4b4b4(Te6edf3dTb4b4b4) Tb4b4b4=> Te6edf3dTb4b4b4.Te6edf3action Tff7b72=== Te6edf3sTb4b4b4.Te6edf3actionTb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4{
Tb4b4b4...Te6edf3sTb4b4b4,
Te6edf3descriptionTff7b72: Te6edf3def Tff7b72? Te6edf3defTb4b4b4.Te6edf3description Tff7b72: Te6edf3sTb4b4b4.Te6edf3actionTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3startRecordingTb4b4b4(Te6edf3callbackTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isRecording Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3onRecordCallback Tff7b72= Te6edf3callbackTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3activeKeysTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3stopRecordingTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3isRecording Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3onRecordCallback Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3activeKeysTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72async Te6edf3saveShortcutTb4b4b4(Te6edf3actionTb4b4b4, Te6edf3keysTb4b4b4) Tb4b4b4{
Te6edf3WebSocketConnectionTb4b4b4.Te6edf3sendTb4b4b4(
Tffa657JSONTb4b4b4.Te6edf3stringifyTb4b4b4(Tb4b4b4{
Te6edf3typeTff7b72: Ta5d6ff"keyboard_shortcuts.set"Tb4b4b4,
Te6edf3actionTff7b72: Te6edf3actionTb4b4b4,
Te6edf3keysTff7b72: Te6edf3keysTb4b4b4,
Tb4b4b4}Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72async Te6edf3deleteShortcutTb4b4b4(Te6edf3actionTb4b4b4) Tb4b4b4{
Te6edf3WebSocketConnectionTb4b4b4.Te6edf3sendTb4b4b4(
Tffa657JSONTb4b4b4.Te6edf3stringifyTb4b4b4(Tb4b4b4{
Te6edf3typeTff7b72: Ta5d6ff"keyboard_shortcuts.delete"Tb4b4b4,
Te6edf3actionTff7b72: Te6edf3actionTb4b4b4,
Tb4b4b4}Tb4b4b4)
Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72export Tff7b72default Tff7b72new Te6edf3KeyboardShortcutsTb4b4b4(Tb4b4b4)Tb4b4b4;
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────